使用硬件合成

硬件合成提供一种高性能方式,使用显示控制器图层合成多个窗口。如果 Kanzi 应用程序由多层彼此叠加的分层应用程序组成,例如带有叠加的群集,则可以选择合成多个窗口。当您使用硬件合成时,可以单独开发和运行其中的每个应用程序。

硬件合成创建一个可以像使用纹理那样使用的合成目标。要得到正确的结果,硬件合成必须使用预乘阿尔法。请参阅阿尔法预乘

当设置好 屏幕 (Screen) 节点的 屏幕清除颜色 (Screen Clear Color) 属性时,Kanzi 直接把颜色值写入到屏幕输出。这意味 屏幕清除颜色 (Screen Clear Color) RGB 值必须同阿尔法值进行预乘。

如果硬件合成不使用经过预乘的阿尔法,您必须将未经预乘的阿尔法转换为 Kanzi 输出的 RGBA 值。要将 RGBA 值转换成未经预乘的阿尔法,请执行以下操作:

  1. 设置 Kanzi 绘制期望到纹理的输出。
  2. 绘制该纹理到带有设置为 不透明 (Opaque)混合模式 (Blend Mode) 属性,且使用输出 RGB 值除以阿尔法值所得到的 RGBA 值的片段着色器的屏幕。

例如:

  1. 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中,复制 DefaultBlit 材质类型,并重命名新的材质类型以及使用该材质类型的材质。
    建议

    如果您的工程不包含 DefaultBlit 材质类型,在素材库 (Library) > 材质和纹理 (Materials and Textures) 按下 Alt 并右键点击 材质类型 (Material Types) 中选择 DefaultBlit

  2. 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中双击新材质类型的 片段着色器 (Fragment Shader) 以在 着色器源编辑器 (Shader Source Editor) 中打开它,并将片段着色器文件内容替换为以下代码:
    uniform sampler2D ContentTexture;
    varying mediump vec2 vTexCoord;
    
    void main()
    {
        precision lowp float;
        
        vec4 color = texture2D(ContentTexture, vTexCoord);
        
        if(color.a > 0.0)
        {
            color.rgb /= color.a;
        }
        
        gl_FragColor = color;
    }
  3. 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 选择片段着色器已经过编辑的材质,在 属性 (Properties) 中点击 同步 uniform (Sync with Uniforms),并删除 Texture0 属性类型。
  4. 素材库 (Library) > 材质和纹理 (Materials and Textures) > 笔刷 (Brushes) 创建一个 材质笔刷 (Material Brush) 并在 属性 (Properties) 中,将 材质 (Material) 属性设置为使用已创建的材质类型的材质。
  5. 属性 (Properties) 材质 (Material) 属性的旁边,点击 前往 材质笔刷 (Material Brush) 使用的材质,并确保材质的 混合模式 (Blend Mode) 属性已设置为 不透明 (Opaque)
  6. 工程 (Project) 中选择RootPage 节点并在属性 (Properties) 中添加并进行以下设置:

另请参阅

合成与混合

材质类型和材质

着色器